Linux Shell 编程基础 ( 二 )

#Linux shell编程基础 ( 二 )

标签: linux shell


echo命令

1
2
3
4
5
 echo [Options] [String] 

-n #不换行输出
-e #启用反斜线转义解释 (例:echo -e "\033[32m-\033[0m" 打印颜色)
-E #禁用反斜线转义解释(默认)

read命令

1
2
3
-p	#命令行指定提示符
-t #等待输入的秒数
-s #隐藏方式读取

cat命令

1
2
3
4
5
6
7
8
-n	#显示文件的内容和行号
-b #只标识非空白行的行号(空白行仍显示)
-e #在每一行的末尾显示“$”字符,在需要将多行内容转换成一行时非常有用
-s #替换两行以上空白行为一行(例:cat -s test | tr -s '\n' 移除空白行)

例:cat >> 目录 <<EOF
内容
EOF #多行追加

tail命令

1
2
3
4
5
6
7
8
9
10
tail:从指定点开始将文件写到标准输出
-b number #从Number变量表示的512字节块位置开始读取指定文件
-c number #从Number变量表示的字节位置开始读取指定文件
-n Number #从Number变量表示的行位置开始读取指定文件
-r #逆序打印

例:
tail -n 20 notes #指定从 notes 文件末尾开始读取的行数
tail -c +200 notes | pg #从第 200 字节开始,每次显示一页 notes 文件
tail -f accounts #跟踪文件的增长

grep命令

1
2
3
4
5
6
7
8
9
grep:文本中查找字符串
-c #只输出匹配行的计数。
-i #不区分大小写(只适用于单字符)。
-h #查询多文件时不显示文件名。
-l #查询多文件时只输出包含匹配字符的文件名。
-n #显示匹配行及行号。
-s #不显示不存在或无匹配文本的错误信息。
-v #显示不包含匹配文本的所有行。
-E #扩展的egrep:用于在文件内查找指定的字符串

sed命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
命令与选项:
a\ #在当前行后添加一行或多行
c\ #用新文本替换当前行中的文本
d #删除行
i\ #在当前行之前插入文本
h #把模式空间的内容复制到暂存缓冲区
H #把模式空间的内容添加到缓冲区
g #取出暂存缓冲区的内容,将其复制到模式缓冲区
G #取出暂存缓冲区的内容,将其追加到模式缓冲区
l #列出非打印字符
p #打印行
n #读入下一行输入,并从下一条而不是第一条命令对其处理
q #结束或退出sed
r #从文件中读取输入行
! #对所选行以外的行应用所有命令
s #用一个字符串替换另外一个字符串
替换标志:
g #在行内进行全局替换
p #打印行
w #将行写入文件
x #交换暂存缓冲区和模式空间的内容
y #将字符转换成另外一个字符

例:
sed ‘3,$d’ file #删除从第3行到最后一行的内容。
sed ‘$d’ file #删除最后一行的内容
sed ‘/abc/d’ #删除包含abc的行。
sed ‘3d’ file #删除第三行的内容
sed ‘s/abc/def/g’ file #把行内的所有abc替换成def,如果没有g,则只替换行内的第一个abc
sed -n ‘s/abc/def/p’ file #只打印发生替换的那些行
sed ‘s/abc/&def/’ file #在所有的abc后面添加def(&表示匹配的内容)
sed -n ‘s/abc/def/gp’ file #把所有的abc替换成def,并打印发生替换的那些行
sed ‘s#abc#def#g’ file #把所有的abc替换成def,跟在替换s后面的字符就是查找串和替换串之间的分割字符,本例中试#

sort命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sort[Options] [String]:串联排序所有指定文件并将结果写到标准输出(排序)
-b #忽略前导的空白区域
-d #只考虑空白区域和字母字符
-f #忽略字母大小写
-g #按照常规数值排序
-i #只排序可打印字符
-n #根据字符串数值比较
-r #逆序输出排序结果
-c #检查输入是否已排序,若已有序则不进行操作
-k #位置1[,位置2] 在位置1 开始一个key,在位置2 终止(默认为行尾)
-m #合并已排序的文件,不再进行排序
-o #文件 将结果写入到文件而非标准输出
-t #分隔符 使用指定的分隔符代替非空格到空格的转换
-u #配合-c,严格校验排序;不配合-c,则只输出一次排序结果

awk命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
awk [options] 'commands' files:行中的每个字符串定义为一个域(段),域和域之间使用分割符分割
$0 #当前记录(作为单个变量)
$1~$n #当前记录的第n个字段,字段间由FS分隔
FS #输入字段分隔符 默认是空格
NF #当前记录中的字段个数,就是有多少列
NR #已经读出的记录数,就是行号,从1开始
RS #输入的记录他隔符默 认为换行符
OFS #输出字段分隔符 默认也是空格
ORS #输出的记录分隔符,默认为换行符
ARGC #命令行参数个数
ARGV #命令行参数数组
FILENAME #当前输入文件的名字
IGNORECASE #如果为真,则进行忽略大小写的匹配
ARGIND #当前被处理文件的ARGV标志符
CONVFMT #数字转换格式 %.6g
ENVIRON #UNIX环境变量
ERRNO #UNIX系统错误消息
FIELDWIDTHS #输入字段宽度的空白分隔字符串
FNR #当前记录数
OFMT #数字的输出格式 %.6g
RSTART #被匹配函数匹配的字符串首
RLENGTH #被匹配函数匹配的字符串长度

uniq命令

1
2
3
4
5
6
7
uniq [Options] [String]:用于报告或忽略文件中的重复行
-c #在每列旁边显示该行重复出现的次数;
-d #仅显示重复出现的行列
-f #忽略比较指定的栏位
-s #忽略比较指定的字符
-u #仅显示出一次的行列
-w #指定要比较的字符